/**
 * ==================== 全局状态管理 Store（搜索历史记录） ====================
 */
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';

interface SearchHistoryItem {
    keyword: string;    // 搜索关键词
    timestamp: number;  // 搜索时间戳
}

export const useSearchHistoryStore = defineStore(
    'searchHistory',
    () => {
        /// State：使用 ref 定义响应式状态
        const historyList = ref<SearchHistoryItem[]>([]);

        /// Getters: 使用 computed 定义计算属性
        // 获取历史记录数量
        const historyCount = computed(() => historyList.value.length);

        // 获取按时间倒序排列的历史记录（最新的在前）
        const sortedHistory = computed(() => {
            return [...historyList.value].sort((a, b) => b.timestamp - a.timestamp);
        });

        // 获取不重复的关键词列表（用于去重显示）
        const uniqueKeywords = computed(() => {
            const keywords = new Set<string>();
            return sortedHistory.value.filter(item => {
                if (keywords.has(item.keyword)) {
                    return false;
                }
                keywords.add(item.keyword);
                return true;
            });
        });

        /// Actions: 定义普通函数来修改状态
        // 添加搜索记录（自动去重并限制数量）
        const addHistory = (keyword: string): void => {
            if (!keyword.trim()) return; // 忽略空字符串

            const existingIndex = historyList.value.findIndex(item => item.keyword === keyword);

            // 如果已存在，先移除旧记录
            if (existingIndex !== -1) {
                historyList.value.splice(existingIndex, 1);
            }

            // 添加新记录到数组开头（最新的总是在前）
            historyList.value.unshift({
                keyword: keyword.trim(),
                timestamp: Date.now()
            });

            // 限制历史记录数量（最多保存50条）：超过时删除最旧的（数组最后一条）
            if (historyList.value.length > 50) {
                historyList.value.pop(); // 删除数组最后一个元素（最旧的记录）
            }
        };

        // 删除单条记录
        const removeHistory = (keyword: string): void => {
            const index = historyList.value.findIndex(item => item.keyword === keyword);
            if (index !== -1) {
                historyList.value.splice(index, 1);
            }
        };

        // 清空所有历史记录
        const clearAllHistory = (): void => {
            historyList.value = [];
        };

        // 根据关键词查找记录
        const findHistory = (keyword: string): SearchHistoryItem | undefined => {
            return historyList.value.find(item => item.keyword === keyword);
        };

        /// 必须返回所有要暴露的状态和方法 
        return {
            historyList,
            historyCount,
            sortedHistory,
            uniqueKeywords,
            addHistory,
            removeHistory,
            clearAllHistory,
            findHistory
        };
    },

    /// 持久化配置 
    {
        persist: {
            enabled: true,
            strategies: [
                {
                    key: 'search-history',
                    storage: localStorage,
                }
            ]
        }
    }
);